package com.demo.work.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author loocup
 * @description
 * @since 2019/4/19
 */
public class ReUtil {

    /**
     * @param regex         正则表达式
     * @param original      原始字符串
     * @return			是否匹配
     */
    public static boolean isMatch(String regex, String original){
        if (original == null || original.trim().equals("")) {
            return false;
        }
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(original);
        return matcher.matches();
    }

    public static boolean isNotMatch(String regex, String orginal){
        return !isMatch(regex, orginal);
    }

    /**
     * 是否正整数
     * @param orginal
     * @return
     */
    public static boolean isPositiveInteger(String orginal) {
        return isMatch("\\+{0,1}\\d+", orginal) && isNotMatch("\\+{0,1}0+", orginal);
    }

    /**
     * 是否负整数
     * @param orginal
     * @return
     */
    public static boolean isNegativeInteger(String orginal) {
        return isMatch("^\\-\\d+", orginal) && isNotMatch("^\\-0+", orginal);
    }

    /**是否自然数（包括正整数，负整数，0）
     * @param orginal
     * @return
     */
    public static boolean isWholeNumber(String orginal) {
        return isMatch("[+-]{0,1}\\d+", orginal);
    }

    /**
     * 是否正小数
     * 这里其实不关心数字是否符合常识上的书写，
     * 即便前面有很多个0，也认为它是一个小数类型的数据
     * @param orginal
     * @return
     */
    public static boolean isPositiveDecimal(String orginal){
        return isMatch("\\+{0,1}\\d+\\.\\d*|\\+{0,1}\\d*\\.\\d+", orginal);
    }

    /**
     * 是否负小数
     * 这里其实不关心数字是否符合常识上的书写，
     * 即便前面有很多个0，也认为它是一个小数类型的数据
     * @param orginal
     * @return
     */
    public static boolean isNegativeDecimal(String orginal){
        return isMatch("^-\\d+\\.\\d*|^-\\d*\\.\\d+", orginal);
    }

    /**
     * 是否小数（正小数，负小数）
     * 不支持科学计数法
     * 这里其实不关心数字是否符合常识上的书写，
     * 即便前面有很多个0，也认为它是一个小数类型的数据
     * @param orginal
     * @return
     */
    public static boolean isDecimal(String orginal){
        return isMatch("[-+]{0,1}\\d+\\.\\d*|[-+]{0,1}\\d*\\.\\d+", orginal);
    }

    /**
     * 是否有理数（包括自然数（包括0） 和 小数）
     * @param orginal
     * @return
     */
    public static boolean isRationalNumber(String orginal){
        return isWholeNumber(orginal) || isDecimal(orginal);
    }

    /**
     * 判断字符是否数字{0-9}
     * @param cha
     * @return
     */
    public static boolean isNumChar(String cha) {
        return isMatch("\\d", cha);
    }

}